/**
 * Console Cleaner Component
 * 添加清空控制台按钮和功能
 */

/**
 * 设置清空控制台功能
 */
export function setupConsoleCleaner() {
  let observer = null;

  /**
   * 创建清空按钮并添加到控制台标题容器
   */
  function addClearButton() {
    // 查找控制台标题容器
    const consoleTitleContainer = document.querySelector(
      ".debugPanel_consoleTitleContainer__vlv6V"
    );
    if (!consoleTitleContainer) return;

    // 检查是否已经有清空按钮
    if (consoleTitleContainer.querySelector(".console-clear-btn")) return;

    // 创建清空按钮
    const clearButton = document.createElement("button");
    clearButton.className = "console-clear-btn";
    clearButton.title = "清空控制台信息";
    clearButton.innerHTML =
      '<div class="console-clear-btn-icon"></div><span>清空控制台</span>';

    // 添加点击事件
    clearButton.addEventListener("click", () => {
      clearConsole();
    });

    // 添加到控制台标题容器
    consoleTitleContainer.appendChild(clearButton);
  }

  /**
   * 清空控制台内容
   */
  function clearConsole() {
    let cleared = false;

    // 方法1: 使用API直接清空日志（首选方法）
    try {
      if (
        unsafeWindow.box3EditCore.gameUIEditor.game.clientScript.clientConsole
      ) {
        unsafeWindow.box3EditCore.gameUIEditor.game.clientScript.clientConsole.clearLog();

        cleared = true;
        return; // 成功后直接返回
      }
    } catch (error) {
      console.warn("清空控制台失败，尝试备用方法", error);
    }

    // 方法2: 直接清空logContainer (备用方法)
    if (!cleared) {
      const logContainers = document.querySelectorAll(
        ".debugPanel_logContainer__8NC1Q"
      );
      if (logContainers.length > 0) {
        logContainers.forEach((container) => {
          container.innerHTML = "";
        });
        cleared = true;
        console.log("通过清空DOM元素清空控制台成功");
        return; // 成功清空后直接返回
      }
    }

    // 备用方法3: 如果找不到指定的容器，尝试从父容器开始
    if (!cleared) {
      const logWrapper = document.querySelector(
        ".debugPanel_logWrapper__Gz8I_.editor-common_scrollbarStyle__S6GxS"
      );

      if (logWrapper) {
        // 寻找logWrapper中的logContainer
        const containerInWrapper = logWrapper.querySelector(
          ".debugPanel_logContainer__8NC1Q"
        );
        if (containerInWrapper) {
          containerInWrapper.innerHTML = "";
          cleared = true;
        }
        // 如果没找到特定容器，则清空所有子元素但保留第一层
        else if (logWrapper.children.length > 0) {
          Array.from(logWrapper.children).forEach((child) => {
            child.innerHTML = "";
          });
          cleared = true;
        }
      }
    }

    // 方法4: 直接清除错误日志元素
    if (!cleared) {
      const errorLogs = document.querySelectorAll(
        ".debugPanel_logError__7Xp2t"
      );
      if (errorLogs.length > 0) {
        errorLogs.forEach((log) => {
          if (log.parentNode) {
            log.parentNode.removeChild(log);
          }
        });
        cleared = true;
      }
    }

    // 输出清理状态
    if (cleared) {
      console.log("控制台日志已清空");
    } else {
      console.log("未找到可清空的日志容器");
    }
  }

  /**
   * 初始化控制台容器观察器
   */
  function initObserver() {
    // 断开现有观察器
    if (observer) {
      observer.disconnect();
    }

    // 观察页面变化，找到控制台容器后添加清空按钮
    observer = new MutationObserver(() => {
      const consoleTitleContainer = document.querySelector(
        ".debugPanel_consoleTitleContainer__vlv6V"
      );
      if (consoleTitleContainer) {
        addClearButton();
      }
    });

    // 观察整个文档，以便捕获动态添加的控制台
    observer.observe(document.body, {
      childList: true,
      subtree: true,
    });

    // 尝试立即添加按钮
    addClearButton();
  }

  // 定时检查控制台容器是否存在
  const checkInterval = setInterval(() => {
    const consoleTitleContainer = document.querySelector(
      ".debugPanel_consoleTitleContainer__vlv6V"
    );
    if (consoleTitleContainer) {
      clearInterval(checkInterval);
      addClearButton();
      initObserver();
    }
  }, 1000);

  // 返回清理函数
  return () => {
    clearInterval(checkInterval);
    if (observer) {
      observer.disconnect();
    }
  };
}
